﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;

    public class Encode
    {
        public Encode()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        public static string base64Encode(string data)
        {
            try
            {
                byte[] encData_byte = new byte[data.Length];
                encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
                string encodedData = Convert.ToBase64String(encData_byte);
                return encodedData.Replace("+", "-").Replace("/", "_");
            }
            catch (Exception e)
            {
                return "";
            }
        }
        public static string base64Decode(string data)
        {
            try
            {
                System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
                System.Text.Decoder utf8Decode = encoder.GetDecoder();
                data = data.Replace("-", "+").Replace("_", "/");
                byte[] todecode_byte = Convert.FromBase64String(data);
                int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
                char[] decoded_char = new char[charCount];
                utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
                string result = new String(decoded_char);
                return result;
            }
            catch (Exception e)
            {
                return "";
            }
        }
        public static string ReplaceCharacter(string word)
        {
            word = word.Replace("^", "");
            word = word.Replace("_", "");
            word = word.Replace("=", "");
            word = word.Replace("+", "");
            word = word.Replace("-", "");
            word = word.Replace("*", "");
            word = word.Replace("|", "");
            word = word.Replace("!", "");
            word = word.Replace("$", "");
            word = word.Replace("%", "");
            word = word.Replace("&", "");
            word = word.Replace("#", "");
            word = word.Replace("?", "");
            word = word.Replace(":", "");
            word = word.Replace(";", "");
            word = word.Replace("/", "");
            word = word.Replace(".", "");
            word = word.Replace(",", "");
            word = word.Replace("~", "");
            word = word.Replace("`", "");
            word = word.Replace("(", "");
            word = word.Replace(")", "");
            word = word.Replace("{", "");
            word = word.Replace("}", "");
            word = word.Replace("[", "");
            word = word.Replace("]", "");
            word = word.Replace("'", "");
            word = word.Replace("\"", "");
            word = word.Replace("  ", " ");
            return word;
        }
        public static string Uni2KD(string strKD)
        {
            string retVal = strKD;

            string[] arKD = {"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", 
                                                "a", "a", "a", "a", "a", "a", "e", "e", "e", "e", "e", "e", "e", "e", 
                                                "e", "e", "e", "d", "i", "i", "i", "i", "i", "o", "o", "o", "o", "o", "o", 
                                                "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "u", "u", "u", 
                                                "u", "u", "u", "u", "u", "u", "u", "u", "y", "y", "y", "y", "y", 
                                                "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
                                                "A", "A", "A", "A", "A", "A", "E", "E", "E", "E", "E", "E", "E", "E", 
                                                "E", "E", "E", "D", "I", "I", "I", "I ", "I ", "O", "O", "O", "O", "O", "O", 
                                                "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "U", "U", "U", 
                                                "U", "U", "U", "U", "U", "U", "U", "U", "Y", "Y", "Y", "Y", "Y"};

            string[] arUni = {"à", "á", "ả", "ã", "ạ", "ầ", "ấ", "ẩ", "ẫ", "ậ", "â", 
                                                 "ằ", "ắ", "ẳ", "ẵ", "ặ", "ă", "è", "é", "ẻ", "ẽ", "ẹ", "ề", "ế", "ể", 
                                                 "ễ", "ệ", "ê", "đ", "ì", "í", "ỉ", "ĩ", "ị", "ò", "ó", "ỏ", "õ", "ọ", "ồ", 
                                                 "ố", "ổ", "ỗ", "ộ", "ô", "ờ", "ớ", "ở", "ỡ", "ợ", "ơ", "ù", "ú", "ủ", 
                                                 "ũ", "ụ", "ừ", "ứ", "ử", "ữ", "ự", "ư", "ỳ", "ý", "ỷ", "ỹ", "ỵ", 
                                                 "À", "Á", "Ả", "Ã", "Ạ", "Ầ", "Ấ", "Ẩ", "Ẫ", "Ậ", "Â", 
                                                 "Ằ", "Ắ", "Ẳ", "Ẵ", "Ặ", "Ă", "È", "É", "Ẻ", "Ẽ", "Ẹ", "Ề", "Ế", "Ể", 
                                                 "Ễ", "Ệ", "Ê", "Đ", "Ì", "Í", "Ỉ", "Ĩ ", "Ị ", "Ò", "Ó", "Ỏ", "Õ", "Ọ", "Ồ", 
                                                 "Ố", "Ổ", "Ỗ", "Ộ", "Ô", "Ờ", "Ớ", "Ở", "Ỡ", "Ợ", "Ơ", "Ù", "Ú", "Ủ", 
                                                 "Ũ", "Ụ", "Ừ", "Ứ", "Ử", "Ữ", "Ự", "Ư", "Ỳ", "Ý", "Ỷ", "Ỹ", "Ỵ"};

            for (int i = 0; i < arUni.Length; i++)
                retVal = retVal.Replace(arUni[i], arKD[i]);
            while (retVal.Contains("  "))
                retVal = retVal.Replace("  ", " ");

            retVal = retVal.Replace(" ", "-");
            retVal = retVal.Replace(",", "-");
            while (retVal.Contains("--"))
                retVal = retVal.Replace("--", "-");
            //retVal = Regex.Replace(retVal, @"^([a-zA-Z0-9]+)", String.Empty);
            retVal = Regex.Replace(retVal, "([^A-Za-z0-9-]+)", String.Empty);
            return retVal;
        }
        public static string Uni2KD2(string strKD)
        {
            string retVal = strKD;

            string[] arKD = {"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", 
                                                "a", "a", "a", "a", "a", "a", "e", "e", "e", "e", "e", "e", "e", "e", 
                                                "e", "e", "e", "d", "i", "i", "i", "i", "i", "o", "o", "o", "o", "o", "o", 
                                                "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "u", "u", "u", 
                                                "u", "u", "u", "u", "u", "u", "u", "u", "y", "y", "y", "y", "y", 
                                                "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
                                                "A", "A", "A", "A", "A", "A", "E", "E", "E", "E", "E", "E", "E", "E", 
                                                "E", "E", "E", "D", "I", "I", "I", "I ", "I ", "O", "O", "O", "O", "O", "O", 
                                                "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "U", "U", "U", 
                                                "U", "U", "U", "U", "U", "U", "U", "U", "Y", "Y", "Y", "Y", "Y"};

            string[] arUni = {"à", "á", "ả", "ã", "ạ", "ầ", "ấ", "ẩ", "ẫ", "ậ", "â", 
                                                 "ằ", "ắ", "ẳ", "ẵ", "ặ", "ă", "è", "é", "ẻ", "ẽ", "ẹ", "ề", "ế", "ể", 
                                                 "ễ", "ệ", "ê", "đ", "ì", "í", "ỉ", "ĩ", "ị", "ò", "ó", "ỏ", "õ", "ọ", "ồ", 
                                                 "ố", "ổ", "ỗ", "ộ", "ô", "ờ", "ớ", "ở", "ỡ", "ợ", "ơ", "ù", "ú", "ủ", 
                                                 "ũ", "ụ", "ừ", "ứ", "ử", "ữ", "ự", "ư", "ỳ", "ý", "ỷ", "ỹ", "ỵ", 
                                                 "À", "Á", "Ả", "Ã", "Ạ", "Ầ", "Ấ", "Ẩ", "Ẫ", "Ậ", "Â", 
                                                 "Ằ", "Ắ", "Ẳ", "Ẵ", "Ặ", "Ă", "È", "É", "Ẻ", "Ẽ", "Ẹ", "Ề", "Ế", "Ể", 
                                                 "Ễ", "Ệ", "Ê", "Đ", "Ì", "Í", "Ỉ", "Ĩ ", "Ị ", "Ò", "Ó", "Ỏ", "Õ", "Ọ", "Ồ", 
                                                 "Ố", "Ổ", "Ỗ", "Ộ", "Ô", "Ờ", "Ớ", "Ở", "Ỡ", "Ợ", "Ơ", "Ù", "Ú", "Ủ", 
                                                 "Ũ", "Ụ", "Ừ", "Ứ", "Ử", "Ữ", "Ự", "Ư", "Ỳ", "Ý", "Ỷ", "Ỹ", "Ỵ"};

            for (int i = 0; i < arUni.Length; i++)
                retVal = retVal.Replace(arUni[i], arKD[i]);
            while (retVal.Contains("  "))
                retVal = retVal.Replace("  ", " ");

            retVal = retVal.Replace("_", "");
            return retVal;
        }

    }
